import config from '@/config'
import { ADMIN } from '@/config/default'
import { formatFullPath } from '@/utils/i18n'
import { filterMenu } from '@/utils/authority-utils'
import { getLocalSetting } from '@/utils/themeUtil'

const localSetting = getLocalSetting(true)
const customTitlesStr = sessionStorage.getItem(process.env.VUE_APP_TBAS_TITLES_KEY)
const customTitles = (customTitlesStr && JSON.parse(customTitlesStr)) || []

export default {
    namespaced: true,
    state: {
        isMobile: false,
        animates: ADMIN.animates,
        palettes: ADMIN.palettes,
        pageMinHeight: 0,
        menuData: [],
        activatedFirst: undefined,
        customTitles,
        systemConfig: null,
        ...config,
        ...localSetting
    },
    getters: {
        menuData(state, getters, rootState) {
            if (state.filterMenu) {
                const { permissions, roles } = rootState.account
                return filterMenu(state.menuData, permissions, roles)
            }
            return state.menuData
        },
        firstMenu(state) {
            const { menuData } = state
            if (menuData.length > 0 && !menuData[0].fullPath) {
                formatFullPath(menuData)
            }
            return menuData.map(item => {
                const menuItem = {...item }
                delete menuItem.children
                return menuItem
            })
        },
        subMenu(state) {
            const { menuData, activatedFirst } = state
            if (menuData.length > 0 && !menuData[0].fullPath) {
                formatFullPath(menuData)
            }
            const current = menuData.find(menu => menu.fullPath === activatedFirst)
            return current && current.children || []
        },
        systemConfig(state) {
            if (!state.systemConfig) {
                try {
                    const systemConfig = localStorage.getItem("eipSystemConfig")
                    state.systemConfig = JSON.parse(systemConfig)
                    state.systemConfig = state.systemConfig ? state.systemConfig : []
                } catch (e) {
                    console.error(e.message)
                }
            }
            return state.systemConfig
        },
    },
    mutations: {
        setDevice(state, isMobile) {
            state.isMobile = isMobile
        },
        setTheme(state, theme) {
            state.theme = theme
        },
        setLayout(state, layout) {
            state.layout = layout
        },
        setMultiPage(state, multiPage) {
            state.multiPage = multiPage
        },
        setAnimate(state, animate) {
            state.animate = animate
        },
        setWeekMode(state, weekMode) {
            state.weekMode = weekMode
        },
        setFixedHeader(state, fixedHeader) {
            state.fixedHeader = fixedHeader
        },
        setFixedSideBar(state, fixedSideBar) {
            state.fixedSideBar = fixedSideBar
        },
        setLang(state, lang) {
            state.lang = lang
        },
        setHideSetting(state, hideSetting) {
            state.hideSetting = hideSetting
        },
        correctPageMinHeight(state, minHeight) {
            state.pageMinHeight += minHeight
        },
        setMenuData(state, menuData) {
            state.menuData = menuData
        },
        setAsyncRoutes(state, asyncRoutes) {
            state.asyncRoutes = asyncRoutes
        },
        setPageWidth(state, pageWidth) {
            state.pageWidth = pageWidth
        },
        setActivatedFirst(state, activatedFirst) {
            state.activatedFirst = activatedFirst
        },
        setFixedTabs(state, fixedTabs) {
            state.fixedTabs = fixedTabs
        },
        setCustomTitle(state, { path, title }) {
            if (title) {
                const obj = state.customTitles.find(item => item.path === path)
                if (obj) {
                    obj.title = title
                } else {
                    state.customTitles.push({ path, title })
                }
                sessionStorage.setItem(process.env.VUE_APP_TBAS_TITLES_KEY, JSON.stringify(state.customTitles))
            }
        },

        setSystemName(state, systemName) {
            state.systemName = systemName
        },

        setSystemConfig(state, systemConfig) {
            state.systemConfig = systemConfig
            localStorage.setItem("eipSystemConfig", JSON.stringify(systemConfig))
        }
    }
}